package com.lianchuang.service;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.lianchuang.entity.autoReply.MessageResponse;
import com.lianchuang.util.CiliBaUtil;
import com.lianchuang.util.Constants;
import com.lianchuang.util.MessageUtil;
import com.lianchuang.util.V6Util;
import com.weixin.robot.FormatXmlProcess;
import com.weixin.robot.TulingApiProcess;

public class CoreService {

	static Logger logger = LoggerFactory.getLogger(CoreService.class);

	/**
	 * 处理微信发来的请求
	 * 
	 * @param request
	 * @return
	 */
	public static String processRequest(HttpServletRequest request) {
		String respMessage = "请求处理异常，请稍候尝试！";
		try {
			System.out.println("into processRequest");
			// 默认返回的文本消息内容
			String respContent = "请求处理异常，请稍候尝试！";

			// xml请求解析
			// 调用消息工具类MessageUtil解析微信发来的xml格式的消息，解析的结果放在HashMap里；
			Map<String, String> requestMap = MessageUtil.parseXml(request);

			System.out.println("getREquestMap.....");
			// 从HashMap中取出消息中的字段；
			// 发送方帐号（open_id）
			String fromUserName = requestMap.get("FromUserName");
			// 公众帐号
			String toUserName = requestMap.get("ToUserName");
			// 消息类型
			String msgType = requestMap.get("MsgType");
			// 消息内容
			String content = requestMap.get("Content");
			// 从HashMap中取出消息中的字段；
			

			logger.info("fromUserName is:" + fromUserName + " toUserName is:"
					+ toUserName + " msgType is:" + msgType);
			System.out
					.println("fromUserName is:" + fromUserName
							+ " toUserName is:" + toUserName + " msgType is:"
							+ msgType);
			// 文本消息
			if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {
				System.out.println("textMsg--->" + content);
				// 微信聊天机器人测试 2015-3-31
				if (content != null) {
					if (content.startsWith("搜")) {
						if(Constants.map.containsKey(content) && Constants.map.get(content).equals(fromUserName)){
							respContent = getResp2(content);
							Constants.map.remove(content);
						}else{
							Constants.map.put(content, fromUserName);
							respContent = getResp1(content);
						}
					} else {
						respContent = "请输入搜+片名,如:搜周末同床。5秒内回复。<a href='http://www.wukong163.com/movie/getWeixinHelp'>使用帮助</a>";
						return MessageResponse.getTextMessage(fromUserName,
								toUserName, respContent);
					}

					if (respContent == "" || null == respContent) {
						Constants.map.remove(content);
						return MessageResponse.getTextMessage(fromUserName,
								toUserName, "未查找到该资源!更多影片访问 http://www.wukong163.com");
					}
					// return FormatXmlProcess.formatXmlAnswer(toUserName,
					// fromUserName, respContent);
					Constants.map.remove(content);
					return MessageResponse.getTextMessage(fromUserName,
							toUserName, respContent+"\r\n <a href='http://www.wukong163.com/movie/getWeixinHelp'>观看帮助</a>");
				}
			} else if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_EVENT)) {// 事件推送
				String eventType = requestMap.get("Event");// 事件类型

				if (eventType.equals(MessageUtil.EVENT_TYPE_SUBSCRIBE)) {// 订阅
					respContent = "欢迎关注悟空影院电影推荐,回复搜+片名,如:搜周末同床,获取下载链接。<a href='http://www.wukong163.com/movie/getWeixinHelp'>使用帮助</a>";
					return MessageResponse.getTextMessage(fromUserName,
							toUserName, respContent);
				} else if (eventType.equals(MessageUtil.EVENT_TYPE_UNSUBSCRIBE)) {// 取消订阅
					// TODO 取消订阅后用户再收不到公众号发送的消息，因此不需要回复消息
				} else if (eventType.equals(MessageUtil.EVENT_TYPE_CLICK)) {// 自定义菜单点击事件
					String eventKey = requestMap.get("EventKey");// 事件KEY值，与创建自定义菜单时指定的KEY值对应
					logger.info("eventKey is:" + eventKey);
					return MenuClickService.getClickResponse(eventKey,
							fromUserName, toUserName);
				}
			} else if (msgType.equals("voice")) {
				String recvMessage = requestMap.get("Recognition");
				// respContent = "收到的语音解析结果："+recvMessage;
				if (recvMessage != null) {
					respContent = TulingApiProcess.getTulingResult(recvMessage);
				} else {
					respContent = "您说的太模糊了，能不能重新说下呢？";
				}
				return MessageResponse.getTextMessage(fromUserName, toUserName,
						respContent);
			} else if (msgType.equals("pic_sysphoto")) {
			} else {
				return MessageResponse.getTextMessage(fromUserName, toUserName,
						"返回为空");
			}

		} catch (Exception e) {
			e.printStackTrace();
			System.out.println(e.getMessage());
		}

		return respMessage;
	}
	private static String getResp1(String content){
		String respContent = "";
		// 去磁力吧搜索
		System.out.println("先使用磁力中....");
		try {
			respContent = CiliBaUtil.getMsg(content.replaceFirst(
					"搜", ""));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//System.out.println("磁力吧结果：" + respContent);
		if (respContent == null || "".equals(respContent)) {
			// 去6v搜索
			System.out.println("后使用6v中...");
			respContent = V6Util.getRes(content.replaceFirst(
					"搜", ""));
			//System.out.println("6v结果：" + respContent);
		}
		if (respContent == null || "".equals(respContent)) {

		} else {
			/*respContent = "欢迎使用悟空影院观看电影\r\n复制下面地址到百度云，新建离线下载后，可在线观看。\r\n"
					+ respContent;*/
		}
		return respContent;
	}
	private static  String getResp2(String content){
		String respContent = "";
		// 去磁力吧搜索
		System.out.println("先使用6V中....");
		try {
			respContent = V6Util.getRes(content.replaceFirst("搜", ""));
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//System.out.println("磁力吧结果：" + respContent);
		if (respContent == null || "".equals(respContent)) {
			// 去6v搜索
			System.out.println("后使用磁力...");
			try {
				respContent = CiliBaUtil.getMsg(content.replaceFirst("搜", ""));
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			//System.out.println("6v结果：" + respContent);
		}
		if (respContent == null || "".equals(respContent)) {

		} else {
			/*respContent = "欢迎使用悟空影院观看电影\r\n复制下面地址到百度云，新建离线下载后，可在线观看。\r\n"
					+ respContent;*/
		}
		return respContent;
	}
}
